How and Why Java is Platform Independent